﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace GIFT
{
    class ConsultaIncremental
    {
        public ConsultaIncremental()
        {
            consulta = new Consulta();
        }

        //Busca en la base de datos el atributo del numero con el nombre que recibe como parametro
        public String buscarAtributo(String nombre, String atributo)
        {
            String atr = "ERROR";
            SqlDataReader datos;
            String sentenciaSql = "Select " + atributo + " from [GIFT].[dbo].[incremental] Where nombre='" + nombre + "'";
            datos = consulta.HacerConsulta(sentenciaSql);
            if (datos != null) //si hay datos se llenan los campos
            {
                while (datos.Read())
                {
                    atr = datos.GetValue(0).ToString();
                    if (atr == "NULL")
                    {
                        atr = "";
                    }
                }
            }
            consulta.CierraConexion(); //Cierra conexion
            return atr;
        }

        //Recibe un nombre y retorna true si este ya existe en la base de datos
        public bool existe(String nombre)
        {
            SqlDataReader datos;
            String sentenciaSql;
            sentenciaSql = "Select nombre From [GIFT].[dbo].[incremental]  Where nombre ='" + nombre + "'";
            datos = consulta.HacerConsulta(sentenciaSql);
            if (datos.HasRows)//lo que se haga para saber si no retorno resultados 
            {
                consulta.CierraConexion();//Cierra la conexion
                return true;
            }
            consulta.CierraConexion();//Cierra la conexion
            return false;
        }

        //Busca nombres de los tipos incrementales que contengan la hilera que reciba como parametro en el nombre o la descripcion
        public ArrayList buscarConcordancias(String frase)
        {
            ArrayList campos = new ArrayList();
            String sentenciaSql;
            SqlDataReader datos;
            sentenciaSql = "Select N.nombre From [GIFT].[dbo].[incremental] N Where N.nombre LIKE '%" + frase + "%' OR N.descripcion LIKE '%" + frase + "%'";
            datos = consulta.HacerConsulta(sentenciaSql);
            if (datos != null)
            {
                while (datos.Read())
                {
                    campos.Add(datos.GetValue(0).ToString());
                }
            }
            consulta.CierraConexion();
            return campos;
        }

        //Obtiene de la base de datos todos los tipos de campos incrementales, y los retorna en un arreglo
        public ArrayList obtieneIncrementales()
        {
            ArrayList incrementales = new ArrayList();
            String sentenciaSql;
            SqlDataReader datos;
            sentenciaSql = "Select nombre From [GIFT].[dbo].[incremental]";
            datos = consulta.HacerConsulta(sentenciaSql);
            if (datos != null)
            {
                while (datos.Read())
                {
                    incrementales.Add(datos.GetValue(0).ToString());
                }
            }
            consulta.CierraConexion();
            return incrementales;
        }

        //Borrar un incremental
        public void borrar(String nombre)
        {
            String sentenciaSql = "DELETE FROM [GIFT].[dbo].[incremental] WHERE nombre ='" + nombre + "'";//crea la consulta
            SqlDataReader datos = consulta.HacerConsulta(sentenciaSql);//la ejecuta
            consulta.CierraConexion();//cierra la conexion
        }

        //Guarda en la base de datos un nuevo incremental
        public void crear(String nombre, String descripcion, String valorInicial, String incremento)
        {
            String sentenciaSql = "INSERT INTO [GIFT].[dbo].[incremental] ([nombre],[descripcion],[fecha_actualizacion],[valor inicial],[incremento]) VALUES ('" + nombre + "','" + descripcion + "',(GetDate())," + valorInicial + "," + incremento + ")";
            SqlDataReader datos = consulta.HacerConsulta(sentenciaSql);
            consulta.CierraConexion();//Cierra la conexion
        }

        //Modifica un incremental en la base de datos
        public void modificar(String nombre, String descripcion, String valorInicial, String incremento)
        {
            String sentenciaSql; //va a guardar la consulta a realizar
            SqlDataReader datos; //guarda el ersultado de la consulta
            sentenciaSql = "UPDATE [GIFT].[dbo].[incremental] SET descripcion= '" + descripcion + "',fecha_actualizacion= (GetDate()),[valor inicial]= " + valorInicial + ", incremento=" + incremento + " WHERE nombre= '" + nombre + "'";
            datos = consulta.HacerConsulta(sentenciaSql); //Ejecuta la consulta
            consulta.CierraConexion();//Cierra la conexion
        }

        //Atributos de la clase
        private Consulta consulta;
    }
}
